home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / awt / FontConfiguration$PropertiesHandler.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  8.9 KB  |  444 lines

  1. package sun.awt;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.HashMap;
  6. import java.util.Iterator;
  7. import java.util.Map;
  8. import sun.java2d.SunGraphicsEnvironment;
  9.  
  10. class FontConfiguration$PropertiesHandler {
  11.    private HashMap<String, Short> scriptIDs;
  12.    private HashMap<String, Short> elcIDs;
  13.    private HashMap<String, Short> componentFontNameIDs;
  14.    private HashMap<String, Short> fontfileNameIDs;
  15.    private HashMap<String, Integer> logicalFontIDs;
  16.    private HashMap<String, Integer> fontStyleIDs;
  17.    private HashMap<Short, Short> filenames;
  18.    private HashMap<Short, short[]> sequences;
  19.    private HashMap<Short, Short[]> scriptFonts;
  20.    private HashMap<Short, Short> scriptAllfonts;
  21.    private HashMap<Short, int[]> exclusions;
  22.    private HashMap<Short, Short> awtfontpaths;
  23.    private HashMap<Short, Short> proportionals;
  24.    private HashMap<Short, Short> scriptAllfontsMotif;
  25.    private HashMap<Short, Short[]> scriptFontsMotif;
  26.    private HashMap<Short, Short> alphabeticSuffix;
  27.    private short[] fallbackScriptIDs;
  28.    private String version;
  29.    private String appendedfontpath;
  30.  
  31.    public void load(InputStream var1) throws IOException {
  32.       this.initLogicalNameStyle();
  33.       this.initHashMaps();
  34.       FontConfiguration.PropertiesHandler.FontProperties var2 = new FontConfiguration.PropertiesHandler.FontProperties(this);
  35.       var2.load(var1);
  36.       this.initBinaryTable();
  37.    }
  38.  
  39.    private void initBinaryTable() {
  40.       FontConfiguration.access$002(new short[20]);
  41.       FontConfiguration.access$000()[0] = 20;
  42.       FontConfiguration.access$102(FontConfiguration.access$200(this.scriptIDs));
  43.       FontConfiguration.access$000()[1] = (short)(FontConfiguration.access$000()[0] + FontConfiguration.access$100().length);
  44.       int var1 = FontConfiguration.access$100().length + this.scriptFonts.size() * 20;
  45.       FontConfiguration.access$302(new short[var1]);
  46.  
  47.       for(Map.Entry var3 : this.scriptAllfonts.entrySet()) {
  48.          FontConfiguration.access$300()[((Short)var3.getKey()).intValue()] = (Short)var3.getValue();
  49.       }
  50.  
  51.       int var19 = FontConfiguration.access$100().length;
  52.  
  53.       for(Map.Entry var4 : this.scriptFonts.entrySet()) {
  54.          FontConfiguration.access$300()[((Short)var4.getKey()).intValue()] = (short)(-var19);
  55.          Short[] var5 = (Short[])var4.getValue();
  56.  
  57.          for(int var6 = 0; var6 < 20; ++var6) {
  58.             if (var5[var6] != null) {
  59.                FontConfiguration.access$300()[var19++] = var5[var6];
  60.             } else {
  61.                FontConfiguration.access$300()[var19++] = 0;
  62.             }
  63.          }
  64.       }
  65.  
  66.       FontConfiguration.access$000()[2] = (short)(FontConfiguration.access$000()[1] + FontConfiguration.access$300().length);
  67.       FontConfiguration.access$402(FontConfiguration.access$200(this.elcIDs));
  68.       FontConfiguration.access$000()[3] = (short)(FontConfiguration.access$000()[2] + FontConfiguration.access$400().length);
  69.       FontConfiguration.access$502(new short[this.elcIDs.size() * 5]);
  70.  
  71.       for(Map.Entry var21 : this.sequences.entrySet()) {
  72.          int var30 = ((Short)var21.getKey()).intValue();
  73.          short[] var36 = (short[])var21.getValue();
  74.          if (var36.length == 1) {
  75.             for(int var39 = 0; var39 < 5; ++var39) {
  76.                FontConfiguration.access$500()[var30 * 5 + var39] = var36[0];
  77.             }
  78.          } else {
  79.             for(int var7 = 0; var7 < 5; ++var7) {
  80.                FontConfiguration.access$500()[var30 * 5 + var7] = var36[var7];
  81.             }
  82.          }
  83.       }
  84.  
  85.       FontConfiguration.access$000()[4] = (short)(FontConfiguration.access$000()[3] + FontConfiguration.access$500().length);
  86.       FontConfiguration.access$602(FontConfiguration.access$200(this.fontfileNameIDs));
  87.       FontConfiguration.access$000()[5] = (short)(FontConfiguration.access$000()[4] + FontConfiguration.access$600().length);
  88.       FontConfiguration.access$702(FontConfiguration.access$200(this.componentFontNameIDs));
  89.       FontConfiguration.access$000()[6] = (short)(FontConfiguration.access$000()[5] + FontConfiguration.access$700().length);
  90.       FontConfiguration.access$802(new short[FontConfiguration.access$700().length]);
  91.  
  92.       for(int var22 = 0; var22 < FontConfiguration.access$800().length; ++var22) {
  93.          FontConfiguration.access$800()[var22] = -1;
  94.       }
  95.  
  96.       for(Map.Entry var23 : this.filenames.entrySet()) {
  97.          FontConfiguration.access$800()[(Short)var23.getKey()] = (Short)var23.getValue();
  98.       }
  99.  
  100.       FontConfiguration.access$000()[7] = (short)(FontConfiguration.access$000()[6] + FontConfiguration.access$800().length);
  101.       FontConfiguration.table_awtfontpaths = new short[FontConfiguration.access$100().length];
  102.  
  103.       for(Map.Entry var24 : this.awtfontpaths.entrySet()) {
  104.          FontConfiguration.table_awtfontpaths[(Short)var24.getKey()] = (Short)var24.getValue();
  105.       }
  106.  
  107.       FontConfiguration.access$000()[8] = (short)(FontConfiguration.access$000()[7] + FontConfiguration.table_awtfontpaths.length);
  108.       FontConfiguration.access$902(new short[this.scriptIDs.size()]);
  109.  
  110.       for(Map.Entry var25 : this.exclusions.entrySet()) {
  111.          int[] var31 = (int[])var25.getValue();
  112.          char[] var37 = new char[var31.length * 2];
  113.          int var40 = 0;
  114.  
  115.          for(int var8 = 0; var8 < var31.length; ++var8) {
  116.             var37[var40++] = (char)(var31[var8] >> 16);
  117.             var37[var40++] = (char)(var31[var8] & '\uffff');
  118.          }
  119.  
  120.          FontConfiguration.access$900()[(Short)var25.getKey()] = FontConfiguration.access$1000(new String(var37));
  121.       }
  122.  
  123.       FontConfiguration.access$000()[9] = (short)(FontConfiguration.access$000()[8] + FontConfiguration.access$900().length);
  124.       FontConfiguration.access$1102(new short[this.proportionals.size() * 2]);
  125.       Iterator var15 = this.proportionals.entrySet().iterator();
  126.  
  127.       Map.Entry var32;
  128.       for(int var26 = 0; var15.hasNext(); FontConfiguration.access$1100()[var26++] = (Short)var32.getValue()) {
  129.          var32 = (Map.Entry)var15.next();
  130.          FontConfiguration.access$1100()[var26++] = (Short)var32.getKey();
  131.       }
  132.  
  133.       FontConfiguration.access$000()[10] = (short)(FontConfiguration.access$000()[9] + FontConfiguration.access$1100().length);
  134.       if (this.scriptAllfontsMotif.size() == 0 && this.scriptFontsMotif.size() == 0) {
  135.          FontConfiguration.access$1202(FontConfiguration.access$1300());
  136.       } else {
  137.          var1 = FontConfiguration.access$100().length + this.scriptFontsMotif.size() * 20;
  138.          FontConfiguration.access$1202(new short[var1]);
  139.  
  140.          for(Map.Entry var33 : this.scriptAllfontsMotif.entrySet()) {
  141.             FontConfiguration.access$1200()[((Short)var33.getKey()).intValue()] = (Short)var33.getValue();
  142.          }
  143.  
  144.          var19 = FontConfiguration.access$100().length;
  145.  
  146.          for(Map.Entry var34 : this.scriptFontsMotif.entrySet()) {
  147.             FontConfiguration.access$1200()[((Short)var34.getKey()).intValue()] = (short)(-var19);
  148.             Short[] var38 = (Short[])var34.getValue();
  149.  
  150.             for(int var42 = 0; var42 < 20; ++var42) {
  151.                if (var38[var42] != null) {
  152.                   FontConfiguration.access$1200()[var19++] = var38[var42];
  153.                } else {
  154.                   FontConfiguration.access$1200()[var19++] = 0;
  155.                }
  156.             }
  157.          }
  158.       }
  159.  
  160.       FontConfiguration.access$000()[11] = (short)(FontConfiguration.access$000()[10] + FontConfiguration.access$1200().length);
  161.       FontConfiguration.access$1402(new short[this.alphabeticSuffix.size() * 2]);
  162.       var15 = this.alphabeticSuffix.entrySet().iterator();
  163.  
  164.       for(int var28 = 0; var15.hasNext(); FontConfiguration.access$1400()[var28++] = (Short)var32.getValue()) {
  165.          var32 = (Map.Entry)var15.next();
  166.          FontConfiguration.access$1400()[var28++] = (Short)var32.getKey();
  167.       }
  168.  
  169.       FontConfiguration.access$000()[15] = FontConfiguration.access$1500(this.fallbackScriptIDs);
  170.       FontConfiguration.access$000()[16] = FontConfiguration.access$1000(this.appendedfontpath);
  171.       FontConfiguration.access$000()[17] = FontConfiguration.access$1000(this.version);
  172.       FontConfiguration.access$000()[12] = (short)(FontConfiguration.access$000()[11] + FontConfiguration.access$1400().length);
  173.       FontConfiguration.access$1602(new short[FontConfiguration.access$1700() + 1]);
  174.       System.arraycopy(FontConfiguration.access$1800(), 0, FontConfiguration.access$1600(), 0, FontConfiguration.access$1700() + 1);
  175.       FontConfiguration.access$000()[13] = (short)(FontConfiguration.access$000()[12] + FontConfiguration.access$1700() + 1);
  176.       FontConfiguration.access$1902(FontConfiguration.access$2000().toString().toCharArray());
  177.       FontConfiguration.access$000()[14] = (short)(FontConfiguration.access$000()[13] + FontConfiguration.access$2000().length());
  178.       FontConfiguration.access$2102(new String[FontConfiguration.access$1600().length]);
  179.    }
  180.  
  181.    private void initLogicalNameStyle() {
  182.       this.logicalFontIDs = new HashMap();
  183.       this.fontStyleIDs = new HashMap();
  184.       this.logicalFontIDs.put("serif", 0);
  185.       this.logicalFontIDs.put("sansserif", 1);
  186.       this.logicalFontIDs.put("monospaced", 2);
  187.       this.logicalFontIDs.put("dialog", 3);
  188.       this.logicalFontIDs.put("dialoginput", 4);
  189.       this.fontStyleIDs.put("plain", 0);
  190.       this.fontStyleIDs.put("bold", 1);
  191.       this.fontStyleIDs.put("italic", 2);
  192.       this.fontStyleIDs.put("bolditalic", 3);
  193.    }
  194.  
  195.    private void initHashMaps() {
  196.       this.scriptIDs = new HashMap();
  197.       this.elcIDs = new HashMap();
  198.       this.componentFontNameIDs = new HashMap();
  199.       this.componentFontNameIDs.put("", new Short((short)0));
  200.       this.fontfileNameIDs = new HashMap();
  201.       this.filenames = new HashMap();
  202.       this.sequences = new HashMap();
  203.       this.scriptFonts = new HashMap();
  204.       this.scriptAllfonts = new HashMap();
  205.       this.exclusions = new HashMap();
  206.       this.awtfontpaths = new HashMap();
  207.       this.proportionals = new HashMap();
  208.       this.scriptFontsMotif = new HashMap();
  209.       this.scriptAllfontsMotif = new HashMap();
  210.       this.alphabeticSuffix = new HashMap();
  211.       this.fallbackScriptIDs = FontConfiguration.access$1300();
  212.    }
  213.  
  214.    private int[] parseExclusions(String var1, String var2) {
  215.       if (var2 == null) {
  216.          return FontConfiguration.access$2200();
  217.       } else {
  218.          int var3 = 1;
  219.  
  220.          for(int var15 = 0; (var15 = var2.indexOf(44, var15)) != -1; ++var15) {
  221.             ++var3;
  222.          }
  223.  
  224.          int[] var5 = new int[var3 * 2];
  225.          int var16 = 0;
  226.          int var6 = 0;
  227.  
  228.          int var22;
  229.          for(int var7 = 0; var7 < var3 * 2; var5[var7++] = var22) {
  230.             int var10 = 0;
  231.             var22 = 0;
  232.  
  233.             try {
  234.                var6 = var2.indexOf(45, var16);
  235.                String var8 = var2.substring(var16, var6);
  236.                var16 = var6 + 1;
  237.                var6 = var2.indexOf(44, var16);
  238.                if (var6 == -1) {
  239.                   var6 = var2.length();
  240.                }
  241.  
  242.                String var9 = var2.substring(var16, var6);
  243.                var16 = var6 + 1;
  244.                int var12 = var8.length();
  245.                int var13 = var9.length();
  246.                if (var12 != 4 && var12 != 6 || var13 != 4 && var13 != 6) {
  247.                   throw new Exception();
  248.                }
  249.  
  250.                var10 = Integer.parseInt(var8, 16);
  251.                var22 = Integer.parseInt(var9, 16);
  252.                if (var10 > var22) {
  253.                   throw new Exception();
  254.                }
  255.             } catch (Exception var14) {
  256.                if (SunGraphicsEnvironment.debugFonts && FontConfiguration.access$2300() != null) {
  257.                   FontConfiguration.access$2300().config("Failed parsing " + var1 + " property of font configuration.");
  258.                }
  259.  
  260.                return FontConfiguration.access$2200();
  261.             }
  262.  
  263.             var5[var7++] = var10;
  264.          }
  265.  
  266.          return var5;
  267.       }
  268.    }
  269.  
  270.    private Short getID(HashMap<String, Short> var1, String var2) {
  271.       Short var3 = (Short)var1.get(var2);
  272.       if (var3 == null) {
  273.          var1.put(var2, (short)var1.size());
  274.          return (Short)var1.get(var2);
  275.       } else {
  276.          return var3;
  277.       }
  278.    }
  279.  
  280.    private void parseProperty(String var1, String var2) {
  281.       if (var1.startsWith("filename.")) {
  282.          var1 = var1.substring(9);
  283.          if (!"MingLiU_HKSCS".equals(var1)) {
  284.             var1 = var1.replace('_', ' ');
  285.          }
  286.  
  287.          Short var20 = this.getID(this.componentFontNameIDs, var1);
  288.          Short var22 = this.getID(this.fontfileNameIDs, var2);
  289.          this.filenames.put(var20, var22);
  290.       } else if (var1.startsWith("exclusion.")) {
  291.          var1 = var1.substring(10);
  292.          this.exclusions.put(this.getID(this.scriptIDs, var1), this.parseExclusions(var1, var2));
  293.       } else if (var1.startsWith("sequence.")) {
  294.          var1 = var1.substring(9);
  295.          boolean var19 = false;
  296.          boolean var21 = false;
  297.          String[] var23 = (String[])FontConfiguration.access$2600(var2).toArray(FontConfiguration.access$2500());
  298.          short[] var24 = new short[var23.length];
  299.  
  300.          for(int var25 = 0; var25 < var23.length; ++var25) {
  301.             if ("alphabetic/default".equals(var23[var25])) {
  302.                var23[var25] = "alphabetic";
  303.                var19 = true;
  304.             } else if ("alphabetic/1252".equals(var23[var25])) {
  305.                var23[var25] = "alphabetic";
  306.                var21 = true;
  307.             }
  308.  
  309.             var24[var25] = this.getID(this.scriptIDs, var23[var25]);
  310.          }
  311.  
  312.          short var26 = FontConfiguration.access$1500(var24);
  313.          Object var27 = null;
  314.          int var29 = var1.indexOf(46);
  315.          Short var28;
  316.          if (var29 == -1) {
  317.             if ("fallback".equals(var1)) {
  318.                this.fallbackScriptIDs = var24;
  319.                return;
  320.             }
  321.  
  322.             if (!"allfonts".equals(var1)) {
  323.                if (FontConfiguration.access$2300() != null) {
  324.                   FontConfiguration.access$2300().config("Error sequence def: <sequence." + var1 + ">");
  325.                }
  326.  
  327.                return;
  328.             }
  329.  
  330.             var28 = this.getID(this.elcIDs, "NULL.NULL.NULL");
  331.          } else {
  332.             var28 = this.getID(this.elcIDs, var1.substring(var29 + 1));
  333.             var1 = var1.substring(0, var29);
  334.          }
  335.  
  336.          Object var10 = null;
  337.          short[] var30;
  338.          if ("allfonts".equals(var1)) {
  339.             var30 = new short[]{var26};
  340.          } else {
  341.             var30 = (short[])this.sequences.get(var28);
  342.             if (var30 == null) {
  343.                var30 = new short[5];
  344.             }
  345.  
  346.             Integer var11 = (Integer)this.logicalFontIDs.get(var1);
  347.             if (var11 == null) {
  348.                if (FontConfiguration.access$2300() != null) {
  349.                   FontConfiguration.access$2300().config("Unrecognizable logicfont name " + var1);
  350.                }
  351.  
  352.                return;
  353.             }
  354.  
  355.             var30[var11] = var26;
  356.          }
  357.  
  358.          this.sequences.put(var28, var30);
  359.          if (var19) {
  360.             this.alphabeticSuffix.put(var28, FontConfiguration.access$1000("default"));
  361.          } else if (var21) {
  362.             this.alphabeticSuffix.put(var28, FontConfiguration.access$1000("1252"));
  363.          }
  364.       } else if (var1.startsWith("allfonts.")) {
  365.          var1 = var1.substring(9);
  366.          if (var1.endsWith(".motif")) {
  367.             var1 = var1.substring(0, var1.length() - 6);
  368.             this.scriptAllfontsMotif.put(this.getID(this.scriptIDs, var1), this.getID(this.componentFontNameIDs, var2));
  369.          } else {
  370.             this.scriptAllfonts.put(this.getID(this.scriptIDs, var1), this.getID(this.componentFontNameIDs, var2));
  371.          }
  372.       } else if (var1.startsWith("awtfontpath.")) {
  373.          var1 = var1.substring(12);
  374.          this.awtfontpaths.put(this.getID(this.scriptIDs, var1), FontConfiguration.access$1000(var2));
  375.       } else if ("version".equals(var1)) {
  376.          this.version = var2;
  377.       } else if ("appendedfontpath".equals(var1)) {
  378.          this.appendedfontpath = var2;
  379.       } else if (var1.startsWith("proportional.")) {
  380.          var1 = var1.substring(13).replace('_', ' ');
  381.          this.proportionals.put(this.getID(this.componentFontNameIDs, var1), this.getID(this.componentFontNameIDs, var2));
  382.       } else {
  383.          boolean var5 = false;
  384.          int var3 = var1.indexOf(46);
  385.          if (var3 == -1) {
  386.             if (FontConfiguration.access$2300() != null) {
  387.                FontConfiguration.access$2300().config("Failed parsing " + var1 + " property of font configuration.");
  388.             }
  389.  
  390.             return;
  391.          }
  392.  
  393.          int var4 = var1.indexOf(46, var3 + 1);
  394.          if (var4 == -1) {
  395.             if (FontConfiguration.access$2300() != null) {
  396.                FontConfiguration.access$2300().config("Failed parsing " + var1 + " property of font configuration.");
  397.             }
  398.  
  399.             return;
  400.          }
  401.  
  402.          if (var1.endsWith(".motif")) {
  403.             var1 = var1.substring(0, var1.length() - 6);
  404.             var5 = true;
  405.          }
  406.  
  407.          Integer var6 = (Integer)this.logicalFontIDs.get(var1.substring(0, var3));
  408.          Integer var7 = (Integer)this.fontStyleIDs.get(var1.substring(var3 + 1, var4));
  409.          Short var8 = this.getID(this.scriptIDs, var1.substring(var4 + 1));
  410.          if (var6 == null || var7 == null) {
  411.             if (FontConfiguration.access$2300() != null) {
  412.                FontConfiguration.access$2300().config("unrecognizable logicfont name/style at " + var1);
  413.             }
  414.  
  415.             return;
  416.          }
  417.  
  418.          Short[] var9;
  419.          if (var5) {
  420.             var9 = (Short[])this.scriptFontsMotif.get(var8);
  421.          } else {
  422.             var9 = (Short[])this.scriptFonts.get(var8);
  423.          }
  424.  
  425.          if (var9 == null) {
  426.             var9 = new Short[20];
  427.          }
  428.  
  429.          var9[var6 * 4 + var7] = this.getID(this.componentFontNameIDs, var2);
  430.          if (var5) {
  431.             this.scriptFontsMotif.put(var8, var9);
  432.          } else {
  433.             this.scriptFonts.put(var8, var9);
  434.          }
  435.       }
  436.  
  437.    }
  438.  
  439.    // $FF: synthetic method
  440.    static void access$2400(FontConfiguration$PropertiesHandler var0, String var1, String var2) {
  441.       var0.parseProperty(var1, var2);
  442.    }
  443. }
  444.